package com.songshuai.sales.tool.dao.tool;

import com.songshuai.sales.tool.dto.response.label.QueryLabelsPageResDto;
import com.songshuai.webapi.baseapi.model.sales.Label;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 此类为[基础代码]自动生成，已经拥有基本的增删改成操作
 * <其他请自行扩展>
 * @Author: 刘汉轩
 * @Date: 2019-03-19 14:49:38
 */
public interface LabelMapper{
    
    /**
     * 根据主键查询单一记录
     * @param labelId
     * @return Label
     */
    Label selectByPrimaryKey(String labelId);
    
    /**
     * 根据条件查询多条记录
     * @param entity
     * @return List<Label>
     */
    List<Label> selectByEntityList(Label entity);
    
    /**
     * 根据条件查询单条记录
     * @param entity
     * @return Label
     */
    Label selectByEntity(Label entity);
    
    /**
     * 根据条件查询ID
     * @param entity
     * @return String
     */
    String selectById(Label entity);
  
    /**
     * 根据条件查询ID集合
     * @param entity
     * @return List<String>
     */
    List<String> selectByIds(Label entity);
    
    /**
     * 插入单条记录（全字段） 
     * @param entity 
     * @return int
     */
    int insert(Label entity);
    
    /**
     * 插入单条记录（字段为空则不添加） 
     * @param entity 
     * @return int
     */
    int insertSelective(Label entity);
    
    /**
     * 根据主键修改
     * @param entity 
     * @return int
     */
    int updateByPrimaryKey(Label entity);
    
    /**
     * 批量插入
     * @param entitys
     * @return int
     */
    int insertBatch(List<Label> entitys);
    
    /**
     * 根据主键批量修改
     * @param entitys
     * @return int
     */
    int updateBatch(List<Label> entitys);
    
	/**
     * 根据主键删除单条记录
     * @param labelId
     *
     */
    void deleteByPrimaryKey(String labelId);
	
    /**
     * 根据主键批量删除
     * @param list
     * @return int
     */
    int deleteBatch(List<String> list);

    /**
     * 根据某些条件删除
     * @param entity
     * @return int
     */
    int deleteByEntity(Label entity);



    /**
     * 根据标签名分页查询
     * @param labelName
     * @return
     */
    List<QueryLabelsPageResDto> queryLabelsByName(@Param("labelName")String labelName);


    /**
     * 查询标签组下子标签关联数量
     * @param labelId
     * @return
     */
    int queryRelationSopCount(String labelId);

    /**
     * 根据id查询子标签集合
     * id为空，查询出所有父级
     * @param labelId
     * @return
     */
    List<Label> queryLabels(@Param("labelId")String labelId);
    
}